package 抽象类.基础;
abstract class Animal{//类中有抽象方法，那么类名也要用abstract修饰
    String name;//抽象类中可以有普通的成员变量

    Animal(){
        //可以使用构造方法，让子类调用初始化自己的成员
    }
    void hello(){
        System.out.println("你好");
    }
    abstract void habit();//称为抽象方法，用关键字abstract，抽像方法中不能出现具体实现
    abstract void habit1();

    //final不能和abstract同时出现，也不可以被static和private修饰
//    final abstract void fun1();//报错
//    static abstract void fun2();//报错
//    public abstract void fun3();
//    private  abstract void fun4();//报错
}
class Dog extends Animal{//继承一个抽象类，那么抽象类中的所有抽象方法都要被具体实现
    @Override
    void habit() {
        System.out.println("摇尾巴");
    }

    @Override
    void habit1() {

    }

}
abstract class Cat extends Animal{//如果不能继承抽象类的方法，那么自己也必须是一个抽象类
//    abstract void habit();
//    abstract void habit1();
}
public class abstract_1{
    public static void main(String[] args) {
//        Animal animal1 = new Animal();//报错，抽象类不可以实例化，作用就是为了被继承
        Animal animal = new Animal() {
            @Override
            void habit() {

            }

            @Override
            void habit1() {

            }
        };

    }
}
